/**********************************************************************
 Copyright (C) 2010 Teppo Eeva

 This file is part of Arithmetic Game.
 For more information, see <http://code.google.com/p/arithmetic-game/>

 Arithmetic Game is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 Arithmetic Game is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with Arithmetic Game.  If not, see <http://www.gnu.org/licenses/>.
 **********************************************************************/

#ifndef HIGHSCOREMANAGER
#define HIGHSCOREMANAGER

#include <QList>
#include "highscoreitem.h"
#include "arithgame.h"

class QStandardItemModel;

class HighScoreManager : public QObject
{
Q_OBJECT
	
friend class TestHighScoreManager;

public:
    HighScoreManager();
    ~HighScoreManager();

public:
        void loadHighStores(const QString storeName);
        void suggestNewHighScore(HighScoreItem& newItem, ArithDiffLevel diffLevel);
        QStandardItemModel* getHighScoreModel(ArithDiffLevel diffLevel);

private:

        bool queryName(QString name);
        void initHighScores(QList<HighScoreItem>& highScoreList);
        void restoreHighScores(QList<HighScoreItem>& highScoreList, ArithDiffLevel diffLevel);
        void storeHighScores(const QList<HighScoreItem>& highScoreList, ArithDiffLevel diffLevel);
        QList<HighScoreItem>& getHighScoreList(ArithDiffLevel diffLevel);

public slots:

        /**
          * Reset high scores
          */
        void resetHighScores();

private: //data

        QList<HighScoreItem> m_easyScoreList;
        QList<HighScoreItem> m_moderateScoreList;
        QList<HighScoreItem> m_hardScoreList;

        QString m_latestName;
        QString m_storeName;

};

#endif // HIGHSCOREMANAGER
